import os
import sys

from quant.util import numberutil

base_dir=os.path.dirname(os.path.dirname(__file__))#获取pathtest的绝对路径
sys.path.append(base_dir)#将pathtest的绝对路径加入到sys.path中
# 转换东方财富网数据的股票代码为掘金代码格式
from datetime import datetime
import pandas as pd
# 交易日
trade_dates =['2022-01-04', '2022-01-05', '2022-01-06', '2022-01-07', '2022-01-10', '2022-01-11', '2022-01-12', '2022-01-13', '2022-01-14', '2022-01-17', '2022-01-18', '2022-01-19', '2022-01-20', '2022-01-21', '2022-01-24', '2022-01-25', '2022-01-26', '2022-01-27', '2022-01-28', '2022-02-07', '2022-02-08', '2022-02-09', '2022-02-10', '2022-02-11', '2022-02-14', '2022-02-15', '2022-02-16', '2022-02-17', '2022-02-18', '2022-02-21', '2022-02-22', '2022-02-23', '2022-02-24', '2022-02-25', '2022-02-28', '2022-03-01', '2022-03-02', '2022-03-03', '2022-03-04', '2022-03-07', '2022-03-08', '2022-03-09', '2022-03-10', '2022-03-11', '2022-03-14', '2022-03-15', '2022-03-16', '2022-03-17', '2022-03-18', '2022-03-21', '2022-03-22', '2022-03-23', '2022-03-24', '2022-03-25', '2022-03-28', '2022-03-29', '2022-03-30', '2022-03-31', '2022-04-01', '2022-04-06', '2022-04-07', '2022-04-08', '2022-04-11', '2022-04-12', '2022-04-13', '2022-04-14', '2022-04-15', '2022-04-18', '2022-04-19', '2022-04-20', '2022-04-21', '2022-04-22', '2022-04-25', '2022-04-26', '2022-04-27', '2022-04-28', '2022-04-29', '2022-05-05', '2022-05-06', '2022-05-09', '2022-05-10', '2022-05-11', '2022-05-12', '2022-05-13', '2022-05-16', '2022-05-17', '2022-05-18', '2022-05-19', '2022-05-20', '2022-05-23', '2022-05-24', '2022-05-25', '2022-05-26', '2022-05-27', '2022-05-30', '2022-05-31', '2022-06-01', '2022-06-02', '2022-06-06', '2022-06-07', '2022-06-08', '2022-06-09', '2022-06-10', '2022-06-13', '2022-06-14', '2022-06-15', '2022-06-16', '2022-06-17', '2022-06-20', '2022-06-21', '2022-06-22', '2022-06-23', '2022-06-24', '2022-06-27', '2022-06-28', '2022-06-29', '2022-06-30', '2022-07-01', '2022-07-04', '2022-07-05', '2022-07-06', '2022-07-07', '2022-07-08', '2022-07-11', '2022-07-12', '2022-07-13', '2022-07-14', '2022-07-15', '2022-07-18', '2022-07-19', '2022-07-20', '2022-07-21', '2022-07-22', '2022-07-25', '2022-07-26', '2022-07-27', '2022-07-28', '2022-07-29', '2022-08-01', '2022-08-02', '2022-08-03', '2022-08-04', '2022-08-05', '2022-08-08', '2022-08-09', '2022-08-10', '2022-08-11', '2022-08-12', '2022-08-15', '2022-08-16', '2022-08-17', '2022-08-18', '2022-08-19', '2022-08-22', '2022-08-23', '2022-08-24', '2022-08-25', '2022-08-26', '2022-08-29', '2022-08-30', '2022-08-31', '2022-09-01', '2022-09-02', '2022-09-05', '2022-09-06', '2022-09-07', '2022-09-08', '2022-09-09', '2022-09-13', '2022-09-14', '2022-09-15', '2022-09-16', '2022-09-19', '2022-09-20', '2022-09-21', '2022-09-22', '2022-09-23', '2022-09-26', '2022-09-27', '2022-09-28', '2022-09-29', '2022-09-30', '2022-10-10', '2022-10-11', '2022-10-12', '2022-10-13', '2022-10-14', '2022-10-17', '2022-10-18', '2022-10-19', '2022-10-20', '2022-10-21', '2022-10-24', '2022-10-25', '2022-10-26', '2022-10-27', '2022-10-28', '2022-10-31', '2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04', '2022-11-07', '2022-11-08', '2022-11-09', '2022-11-10', '2022-11-11', '2022-11-14', '2022-11-15', '2022-11-16', '2022-11-17', '2022-11-18', '2022-11-21', '2022-11-22', '2022-11-23', '2022-11-24', '2022-11-25', '2022-11-28', '2022-11-29', '2022-11-30', '2022-12-01', '2022-12-02', '2022-12-05', '2022-12-06', '2022-12-07', '2022-12-08', '2022-12-09', '2022-12-12', '2022-12-13', '2022-12-14', '2022-12-15', '2022-12-16', '2022-12-19', '2022-12-20', '2022-12-21', '2022-12-22', '2022-12-23', '2022-12-26', '2022-12-27', '2022-12-28', '2022-12-29', '2022-12-30', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12', '2023-01-13', '2023-01-16', '2023-01-17', '2023-01-18', '2023-01-19', '2023-01-20', '2023-01-30', '2023-01-31', '2023-02-01', '2023-02-02', '2023-02-03', '2023-02-06', '2023-02-07', '2023-02-08', '2023-02-09', '2023-02-10', '2023-02-13', '2023-02-14', '2023-02-15', '2023-02-16', '2023-02-17', '2023-02-20', '2023-02-21', '2023-02-22', '2023-02-23', '2023-02-24', '2023-02-27', '2023-02-28', '2023-03-01', '2023-03-02', '2023-03-03', '2023-03-06', '2023-03-07', '2023-03-08', '2023-03-09', '2023-03-10', '2023-03-13', '2023-03-14', '2023-03-15', '2023-03-16', '2023-03-17', '2023-03-20', '2023-03-21', '2023-03-22', '2023-03-23', '2023-03-24', '2023-03-27', '2023-03-28', '2023-03-29', '2023-03-30', '2023-03-31', '2023-04-03', '2023-04-04', '2023-04-06', '2023-04-07', '2023-04-10', '2023-04-11', '2023-04-12', '2023-04-13', '2023-04-14', '2023-04-17', '2023-04-18', '2023-04-19', '2023-04-20', '2023-04-21', '2023-04-24', '2023-04-25', '2023-04-26', '2023-04-27', '2023-04-28', '2023-05-04', '2023-05-05', '2023-05-08', '2023-05-09', '2023-05-10', '2023-05-11', '2023-05-12', '2023-05-15', '2023-05-16', '2023-05-17', '2023-05-18', '2023-05-19', '2023-05-22', '2023-05-23', '2023-05-24', '2023-05-25', '2023-05-26', '2023-05-29', '2023-05-30', '2023-05-31', '2023-06-01', '2023-06-02', '2023-06-05', '2023-06-06', '2023-06-07', '2023-06-08', '2023-06-09', '2023-06-12', '2023-06-13', '2023-06-14', '2023-06-15', '2023-06-16', '2023-06-19', '2023-06-20', '2023-06-21', '2023-06-26', '2023-06-27', '2023-06-28', '2023-06-29', '2023-06-30', '2023-07-03', '2023-07-04', '2023-07-05', '2023-07-06', '2023-07-07', '2023-07-10', '2023-07-11', '2023-07-12', '2023-07-13', '2023-07-14', '2023-07-17', '2023-07-18', '2023-07-19', '2023-07-20', '2023-07-21', '2023-07-24', '2023-07-25', '2023-07-26', '2023-07-27', '2023-07-28', '2023-07-31', '2023-08-01', '2023-08-02', '2023-08-03', '2023-08-04', '2023-08-07', '2023-08-08', '2023-08-09', '2023-08-10', '2023-08-11', '2023-08-14', '2023-08-15', '2023-08-16', '2023-08-17', '2023-08-18', '2023-08-21', '2023-08-22', '2023-08-23', '2023-08-24', '2023-08-25', '2023-08-28', '2023-08-29', '2023-08-30', '2023-08-31', '2023-09-01', '2023-09-04', '2023-09-05', '2023-09-06', '2023-09-07', '2023-09-08', '2023-09-11', '2023-09-12', '2023-09-13', '2023-09-14', '2023-09-15', '2023-09-18', '2023-09-19', '2023-09-20', '2023-09-21', '2023-09-22', '2023-09-25', '2023-09-26', '2023-09-27', '2023-09-28', '2023-10-09', '2023-10-10', '2023-10-11', '2023-10-12', '2023-10-13', '2023-10-16', '2023-10-17', '2023-10-18', '2023-10-19', '2023-10-20', '2023-10-23', '2023-10-24', '2023-10-25', '2023-10-26', '2023-10-27', '2023-10-30', '2023-10-31', '2023-11-01', '2023-11-02', '2023-11-03', '2023-11-06', '2023-11-07', '2023-11-08', '2023-11-09', '2023-11-10', '2023-11-13', '2023-11-14', '2023-11-15', '2023-11-16', '2023-11-17', '2023-11-20', '2023-11-21', '2023-11-22', '2023-11-23', '2023-11-24', '2023-11-27', '2023-11-28', '2023-11-29', '2023-11-30', '2023-12-01', '2023-12-04', '2023-12-05', '2023-12-06', '2023-12-07', '2023-12-08', '2023-12-11', '2023-12-12', '2023-12-13', '2023-12-14', '2023-12-15', '2023-12-18', '2023-12-19', '2023-12-20', '2023-12-21', '2023-12-22', '2023-12-25', '2023-12-26', '2023-12-27', '2023-12-28', '2023-12-29']

# 从东方财富通代码转到掘金代码
def getSymbolFromEastMoney(code):
    ret = ''
    prec = code[0:2]
    if prec == '60':
        ret = '{0}.{1}'.format('SHSE', code)
    elif prec == '30' or prec == '00':
        ret = '{0}.{1}'.format('SZSE', code)
    return ret

# 从复合股票代码分割出股票代码和市场代码
def getSymbol(code,pos):
    ret=''
    if pos==0:
        ret = code.split('.')[pos]
        if ret == 'SHSE':
            ret = 'sh'
        else:
            ret = 'sz'
    elif pos==1:
        ret = code.split('.')[pos]
    return ret
    # pass

# 拼奏掘金格式股票代码包括市场代码
def getGmStyleSymbol(code,market):
    pref='SHSE'
    if market=='sz':
        pref='SZSE'
    return  '{0}.{1}'.format(pref,code )

# 讯投代码转掘金
def xtToGmSymbol(code):
    symbol=code.split('.')[0]
    symbol=getGmSymbol(symbol)
    return symbol

# 掘金代码转讯投
def GmToXtSymbol(code):
    symbol=code.split('.')[1]
    symbol=getXtSymbol(symbol)
    return symbol

# 拼奏掘金格式股票代码包括市场代码
def getGmSymbol(code):
    if len(code)<6:
        code= code.zfill(6)
    ret = ''
    prec = code[0:1]
    if prec == '6' or prec == '5':
        ret = '{0}.{1}'.format('SHSE', code)
    # elif prec == '30' or prec == '00':
    else:
        ret = '{0}.{1}'.format('SZSE', code)
    return ret

# 拼奏掘金格式股票代码包括市场代码
def getXtSymbol(code):
    if len(code)<6:
        code= code.zfill(6)
    ret = ''
    prec = code[0:1]
    if prec == '6':
        ret = '{0}.{1}'.format(code,'SH')
    # elif prec == '30' or prec == '00':
    else:
        ret = '{0}.{1}'.format(code,'SZ')
    return ret
# 传入普通代码数组生成掘金代码字符串
def getGmSymbolStr(codes):
    ret=''
    i=0
    for code in codes:
        if i>0:
            ret=ret+','
        ret=ret+getGmSymbol(code)
        i=i+1
    return ret

# 删除股票代码前缀
def delSymbolPrefix(symbol):
    ret=symbol
    if symbol.find('.')>=0:
        ret=symbol.split('.')[1]
    return ret

# 从股票代码获取市场代码{适用东方财富网获取数据}
def getMarketFromGmSymbol(code):
    pref=code.split('.')[0]
    ret=0
    if pref=="SHSE":
        ret=1
    elif pref=="SZSE":
        ret=0
    return ret

# 掘金格式转普通格式
def gmToNormalCode(symbols):
    ret=[]
    for s in symbols:
        ret.append(delSymbolPrefix(s))
    return ret
# 拼奏掘金格式股票代码包括市场代码
def getGmToEastmoneySymbol(code):
    code=code.replace('SHSE',"1")
    code = code.replace('SZSE', "0")
    return code

# 拼奏富途格式股票代码包括市场代码
def getFutuSymbol(code):
    if len(code)<6:
        code= code.zfill(6)
    ret = ''
    prec = code[0:1]
    if prec == '6':
        ret = '{0}.{1}'.format('SH', code)
    # elif prec == '30' or prec == '00':
    else:
        ret = '{0}.{1}'.format('SZ', code)
    return ret

# 拼奏富途格式股票代码包括市场代码
def getFutuSymbols(codes):
    ret=[]
    for i, v in codes.items():
        ret.append(getFutuSymbol(v))
    return ret

# 判断是否交易日
def isTradeDate(date):
    ret=False
    if date in trade_dates:
        ret=True
    return ret

# 获取最近的交易日期
def getLatelyTradeDate():
    dates = pd.Series(trade_dates)
    df= pd.DataFrame(dates,columns=['date'])
    df['date']=pd.to_datetime(df['date'])
    df=df.loc[df['date']<=datetime.now(),:]
    date=df.at[len(df)-1,'date']
    return date

#获取上一交易日
def get_last_trade_date():
    dates = pd.Series(trade_dates)
    df= pd.DataFrame(dates,columns=['date'])
    df['date']=pd.to_datetime(df['date'])
    now=datetime.strptime(datetime.now().strftime('%Y-%m-%d'), '%Y-%m-%d')
    df=df.loc[df['date']<now,:]
    date=df.at[len(df)-1,'date']
    return date

def get_new_finished_trade_date():
    date = datetime.now()
    if (date.hour < 15) or isTradeDate(date.strftime("%Y-%m-%d")) == False:
        date = get_last_trade_date()
    return  date


#获取日的上一交易日
def get_date_last_trade(date):
    dates = pd.Series(trade_dates)
    df= pd.DataFrame(dates,columns=['date'])
    df['date']=pd.to_datetime(df['date'])
    date=datetime.strptime(date.strftime('%Y-%m-%d'), '%Y-%m-%d')
    df=df.loc[df['date']<date,:]
    date=df.at[len(df)-1,'date']
    return date

#获取日的前n交易日
def get_date_pren_trade(n):
    dates = pd.Series(trade_dates)
    df= pd.DataFrame(dates,columns=['date'])
    df['date']=pd.to_datetime(df['date'])
    date=datetime.now()
    df=df.loc[df['date']<date,:]
    date=df.at[len(df)-n,'date']
    return date

#获取区间所有交易日
def get_period_trade_date(begin,end):
    dates = pd.Series(trade_dates)
    df= pd.DataFrame(dates,columns=['date'])
    df['date']=pd.to_datetime(df['date'])
    begin=datetime.strptime(begin, '%Y-%m-%d')
    end=datetime.strptime(end, '%Y-%m-%d')
    df=df.loc[(df['date']>=begin) & (df['date']<=end),:]
    return df

# 获取报表日期
def get_reporter_date():
    rpt_dates=["2023-12-31","2023-09-30","2023-06-30","2023-03-31","2022-12-31","2022-09-30","2022-06-30","2022-03-31","2021-12-31","2021-09-30","2021-06-30","2021-03-31"]
    dates = pd.Series(rpt_dates)
    df = pd.DataFrame(dates, columns=['date'])
    df['date'] = pd.to_datetime(df['date'])
    now = datetime.strptime(datetime.now().strftime('%Y-%m-%d'), '%Y-%m-%d')
    df = df.loc[df['date'] < now, :]
    df.reset_index(drop=True,inplace=True)
    date = df.at[0, 'date']
    return date.strftime('%Y-%m-%d')
    # date=GmApi().get_last_trade_date()
    # return pd.to_datetime(date)
    # loginfo(date)

def value_to_volume(value,price):
    volume = int(value / price)
    volume = numberutil.get_neat(volume)
    return volume

if __name__=='__main__':
    if isTradeDate('2023-01-08'):
        print('yes')
    else:
        print('no')
    # getLatelyTradeDate()
    # date=get_reporter_date()
    # code=gmToNormalCode(['SHSE.600031','SHSE.600032','SZSE.000031'])
    # loginfo(code)
    # df=get_period_trade_date('2021-10-19','2022-02-22')
    # date= get_date_pren_trade(5)
    # code=GmToXtSymbol("SZSE.600222")
    # print(code)
    date=get_date_pren_trade(20)
    print(date)